package com.xydtech.ecard.merchant.service.impl;

import com.alibaba.fastjson.JSONObject;
import com.xydtech.common.core.domain.entity.SysDept;
import com.xydtech.ecard.merchant.domain.*;
import com.xydtech.ecard.merchant.mapper.EcardBranchEnterpriseChartMapper;
import com.xydtech.ecard.merchant.service.IEcardBranchEnterpriseChartService;
import com.xydtech.system.service.ISysDeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 电子名片企业信息图表统计Service业务层处理
 *
 * @author yuzhiguo
 * @date 2024-09-09 下午2:48
 */
@Service
public class EcardBranchEnterpriseChartServiceImpl implements IEcardBranchEnterpriseChartService {

    @Autowired
    private EcardBranchEnterpriseChartMapper ecardBranchEnterpriseChartMapper;
    @Autowired
    private ISysDeptService sysDeptService;


    /**
     * 查询企业信息建档拜访统计数据
     * @param userId
     * @return
     */
    @Override
    public JSONObject getEntFilingVisitsStatistics(Long userId) {
        JSONObject statisticsData = new JSONObject();
        List<EcardBranchEcardChart> perFilingVisitsNums = ecardBranchEnterpriseChartMapper.selectEntFilingVisitsByUserId(userId);
        statisticsData.put("entPerFilingNums",perFilingVisitsNums.get(0).getMerchantNum());//企业本人累计建档总数
        statisticsData.put("entPerVisitNums",perFilingVisitsNums.get(1).getMerchantNum());//企业本人累计拜访总数
        statisticsData.put("entPerDoVisitNums",perFilingVisitsNums.get(2).getMerchantNum());//企业本人超时拜访总数
        statisticsData.put("entPerUnDoVisitNums",perFilingVisitsNums.get(3).getMerchantNum());//企业本人超时未拜访总数
        statisticsData.put("entPerFilingThisMonthNums",perFilingVisitsNums.get(4).getMerchantNum());//企业本人本月新增建档总数
        statisticsData.put("entPerFilingCompareNums",perFilingVisitsNums.get(4).getMerchantNum() - perFilingVisitsNums.get(5).getMerchantNum());//企业本人建档较上月对比
        if (statisticsData.getLong("entPerFilingCompareNums") >= 0){
            statisticsData.put("entPerFilingType", "1");//较上月企业本人建档类型（1：上升，2：下降）
        } else {
            statisticsData.put("entPerFilingType", "2");//较上月企业本人建档类型（1：上升，2：下降）
        }
        statisticsData.put("entPerVisitThisMonthNums",perFilingVisitsNums.get(6).getMerchantNum());//企业本人本月新增拜访总数
        statisticsData.put("entPerVisitCompareNums",perFilingVisitsNums.get(6).getMerchantNum() - perFilingVisitsNums.get(7).getMerchantNum());//企业本人拜访较上月对比
        if (statisticsData.getLong("entPerVisitCompareNums") >= 0){
            statisticsData.put("entPerVisitType", "1");//较上月企业本人拜访类型（1：上升，2：下降）
        } else {
            statisticsData.put("entPerVisitType", "2");//较上月企业本人拜访类型（1：上升，2：下降）
        }
        return statisticsData;
    }

    /**
     * 本人楼宇建档数量
     * @param userId
     * @return
     */
    @Override
    public JSONObject getEntLocationFilings(Long userId) {
        JSONObject statisticsData = new JSONObject();
        List<EcardBranchEcardChart> perFilingVisitsNums = ecardBranchEnterpriseChartMapper.getEntLocationFilings(userId);
        statisticsData.put("entLocFilingNums",perFilingVisitsNums.get(0).getMerchantNum());//企业本人楼宇累计建档总数
        statisticsData.put("entLocFilingThisMonthNums",perFilingVisitsNums.get(1).getMerchantNum());//企业本人本月楼宇新增建档总数
        statisticsData.put("entLocFilingCompareNums",perFilingVisitsNums.get(1).getMerchantNum() - perFilingVisitsNums.get(2).getMerchantNum());//企业本人楼宇建档较上月对比
        if (statisticsData.getLong("entLocFilingCompareNums") >= 0){
            statisticsData.put("entLocFilingType", "1");//较上月企业本人楼宇建档类型（1：上升，2：下降）
        } else {
            statisticsData.put("entLocFilingType", "2");//较上月企业本人楼宇建档类型（1：上升，2：下降）
        }
        return statisticsData;
    }

    /**
     * 全行企业建档拜访数量
     * @param deptId
     * @return
     */
    @Override
    public JSONObject getEntAllFilingVisitsNums(Long deptId) {
        SysDept sysDept = sysDeptService.selectSecondLevelDeptByDeptId(deptId);
        JSONObject statisticsData = new JSONObject();
        List<EcardBranchEcardChart> allFilingVisitsNums = ecardBranchEnterpriseChartMapper.getEntAllFilingVisitsNums(sysDept.getDeptId());
        statisticsData.put("entFilingNums",allFilingVisitsNums.get(0).getMerchantNum());//全行企业建档总数
        statisticsData.put("entFilingLastMonthNums",allFilingVisitsNums.get(1).getMerchantNum());//上月新增企业建档总数
        statisticsData.put("entFilingThisMonthNums",allFilingVisitsNums.get(2).getMerchantNum());//本月新增企业建档总数
        statisticsData.put("entFilingCompareNums",allFilingVisitsNums.get(2).getMerchantNum() - allFilingVisitsNums.get(1).getMerchantNum());//企业建档较上月对比
        statisticsData.put("entVisitNums",allFilingVisitsNums.get(3).getMerchantNum());//企业拜访总次数
        statisticsData.put("entVisitLastMonthNums",allFilingVisitsNums.get(4).getMerchantNum());//上月新增企业拜访总数
        statisticsData.put("entVisitThisMonthNums",allFilingVisitsNums.get(5).getMerchantNum());//本月新增企业拜访总数
        statisticsData.put("entVisitCompareNums",allFilingVisitsNums.get(5).getMerchantNum() - allFilingVisitsNums.get(4).getMerchantNum());//企业拜访较上月对比
        return statisticsData;
    }

    /**
     * 全行楼宇建档数量
     * @param deptId
     * @return
     */
    @Override
    public JSONObject getEntAllLocationFilings(Long deptId) {
        SysDept sysDept = sysDeptService.selectSecondLevelDeptByDeptId(deptId);
        JSONObject statisticsData = new JSONObject();
        List<EcardBranchEcardChart> allFilingVisitsNums = ecardBranchEnterpriseChartMapper.getEntAllLocationFilings(sysDept.getDeptId());
        statisticsData.put("entLocFilingNums",allFilingVisitsNums.get(0).getMerchantNum());//全行楼宇建档总数
        statisticsData.put("entLocFilingLastMonthNums",allFilingVisitsNums.get(1).getMerchantNum());//上月新增楼宇建档总数
        statisticsData.put("entLocFilingThisMonthNums",allFilingVisitsNums.get(2).getMerchantNum());//本月新增楼宇建档总数
        statisticsData.put("entLocFilingCompareNums",allFilingVisitsNums.get(2).getMerchantNum() - allFilingVisitsNums.get(1).getMerchantNum());//楼宇建档较上月对比
        return statisticsData;
    }

    /**
     * 企业超时拜访数量
     * @param deptId
     * @return
     */
    @Override
    public JSONObject getEntTimeoutVisitsNums(Long deptId) {
        SysDept sysDept = sysDeptService.selectSecondLevelDeptByDeptId(deptId);
        JSONObject statisticsData = new JSONObject();
        List<EcardBranchEcardChart> allTimeoutVisitsNums = ecardBranchEnterpriseChartMapper.getEntTimeoutVisitsNums(sysDept.getDeptId());
        statisticsData.put("entDoTaskNums",allTimeoutVisitsNums.get(0).getDoTaskSum());//企业超时拜访总数
        statisticsData.put("entDoTaskLastMonthNums",allTimeoutVisitsNums.get(1).getDoTaskSum());//上月新增企业超时拜访总数
        statisticsData.put("entDoTaskThisMonthNums",allTimeoutVisitsNums.get(2).getDoTaskSum());//本月新增企业超时拜访总数
        statisticsData.put("entDoTaskCompareNums",allTimeoutVisitsNums.get(2).getDoTaskSum() - allTimeoutVisitsNums.get(1).getDoTaskSum());//企业超时拜访较上月对比
        statisticsData.put("entUndoTaskNums",allTimeoutVisitsNums.get(3).getDoTaskSum());//企业超时未拜访总次数
        statisticsData.put("entUndoTaskLastMonthNums",allTimeoutVisitsNums.get(4).getDoTaskSum());//上月新增企业超时未拜访总数
        statisticsData.put("entUndoTaskThisMonthNums",allTimeoutVisitsNums.get(5).getDoTaskSum());//本月新增企业超时未拜访总数
        statisticsData.put("entUndoTaskCompareNums",allTimeoutVisitsNums.get(5).getDoTaskSum() - allTimeoutVisitsNums.get(4).getDoTaskSum());//企业超时未拜访较上月对比
        return statisticsData;
    }

    /**
     * 查询企业信息建档折线图数据
     * @param deptId
     * @return
     */
    @Override
    public List<EcardBranchEcardChart> getEntFilingLineChart(Long deptId) {
        SysDept sysDept = sysDeptService.selectSecondLevelDeptByDeptId(deptId);
        return ecardBranchEnterpriseChartMapper.getEntFilingLineChart(sysDept.getDeptId());
    }

    /**
     * 查询企业信息建档折线图数据（小程序接口）
     * @param deptId
     * @return
     */
    @Override
    public List<EcardBranchEcardChart> getEntFilingLineChartByApplet(Long deptId) {
        SysDept sysDept = sysDeptService.selectSecondLevelDeptByDeptId(deptId);
        return ecardBranchEnterpriseChartMapper.getEntFilingLineChartByApplet(sysDept.getDeptId());
    }

    /**
     * 查询企业信息拜访折线图数据
     * @param deptId
     * @return
     */
    @Override
    public List<EcardBranchEcardChart> getEntVisitLineChart(Long deptId) {
        SysDept sysDept = sysDeptService.selectSecondLevelDeptByDeptId(deptId);
        return ecardBranchEnterpriseChartMapper.getEntVisitLineChart(sysDept.getDeptId());
    }

    /**
     * 查询企业信息拜访柱状图数据接口（小程序接口）
     * @param deptId
     * @return
     */
    @Override
    public List<EcardBranchEcardChart> getEntVisitLineChartByApplet(Long deptId) {
        SysDept sysDept = sysDeptService.selectSecondLevelDeptByDeptId(deptId);
        return ecardBranchEnterpriseChartMapper.getEntVisitLineChartByApplet(sysDept.getDeptId());
    }

    /**
     * 机构企业建档排名
     * @param ecardBranchDeptFiling
     * @return
     */
    @Override
    public List<EcardBranchDeptFiling> getEntDeptFilingList(EcardBranchDeptFiling ecardBranchDeptFiling) {
        return ecardBranchEnterpriseChartMapper.getEntDeptFilingList(ecardBranchDeptFiling);
    }

    /**
     * 机构企业拜访次数排名
     * @param ecardBranchDeptVisit
     * @return
     */
    @Override
    public List<EcardBranchDeptVisit> getEntDeptVisitsList(EcardBranchDeptVisit ecardBranchDeptVisit) {
        return ecardBranchEnterpriseChartMapper.getEntDeptVisitsList(ecardBranchDeptVisit);
    }

    /**
     * 机构超时拜访次数排名
     * @param ecardBranchDeptDoTask
     * @return
     */
    @Override
    public List<EcardBranchDeptDoTask> getEntDeptDoTaskList(EcardBranchDeptDoTask ecardBranchDeptDoTask) {
        return ecardBranchEnterpriseChartMapper.getEntDeptDoTaskList(ecardBranchDeptDoTask);
    }

    /**
     * 机构超时未拜访次数排名
     * @param ecardBranchDeptUndoTask
     * @return
     */
    @Override
    public List<EcardBranchDeptUndoTask> getEntDeptUnDoTaskList(EcardBranchDeptUndoTask ecardBranchDeptUndoTask) {
        return ecardBranchEnterpriseChartMapper.getEntDeptUnDoTaskList(ecardBranchDeptUndoTask);
    }

    /**
     * 营销人员企业建档排名
     * @param ecardBranchUserFiling
     * @return
     */
    @Override
    public List<EcardBranchUserFiling> getEntUserFilingList(EcardBranchUserFiling ecardBranchUserFiling) {
        return ecardBranchEnterpriseChartMapper.getEntUserFilingList(ecardBranchUserFiling);
    }

    /**
     * 营销人员企业拜访次数排名
     * @param ecardBranchUserVisit
     * @return
     */
    @Override
    public List<EcardBranchUserVisit> getEntUserVisitsList(EcardBranchUserVisit ecardBranchUserVisit) {
        return ecardBranchEnterpriseChartMapper.getEntUserVisitsList(ecardBranchUserVisit);
    }

    /**
     * 营销人员企业超时拜访次数排名
     * @param ecardBranchUserDoTask
     * @return
     */
    @Override
    public List<EcardBranchUserDoTask> getEntUserDoTaskList(EcardBranchUserDoTask ecardBranchUserDoTask) {
        return ecardBranchEnterpriseChartMapper.getEntUserDoTaskList(ecardBranchUserDoTask);
    }

    /**
     * 营销人员企业超时未拜访次数排名
     * @param ecardBranchUserUndoTask
     * @return
     */
    @Override
    public List<EcardBranchUserUndoTask> getEntUserUnDoTaskList(EcardBranchUserUndoTask ecardBranchUserUndoTask) {
        return ecardBranchEnterpriseChartMapper.getEntUserUnDoTaskList(ecardBranchUserUndoTask);
    }
}
